/**
 * CopyRight zh
 * 2018/08/15
 * positionLocation.js
 * version : 1.0.0
 */
'use strict'
import Vue from 'vue'
import BMap from 'BMap'
Vue.use(BMap)
/**
 * 引用：
 * import LocationBMap from '@/utils/positionLocation/positionLocation'
 * 调用的示例：
 * nowPlaceClick: function() {
  const that = this
  that.loadingShow = true
  // 位置信息获取-当api请求失败或成功后，执行callback回调 => function(res_data){}
  LocationBMap.getPosition(function(res_data) {
    // console.log('getPosition-res_data', res_data)
    if (res_data.status) {
      that.loadingShow = false
      Toast({
        message: '获取当前位置成功！',
        duration: 1000
      })
      that.driverParam.nowLocation = res_data.nowLocation
      // that.startCityKeyword = res_data.nowLocation.city
    } else {
      that.loadingShow = false
      Toast({
        message: '获取当前位置失败！',
        duration: 1000
      })
    }
  })
}
 */

const locationBMap = {
  /**
   * @type {Object,Boolean}
   */
  locationData: { // 用于定位相关信息提交
    nowLocation: {
      lat: '', // 纬度
      lon: '', // 经度
      province: '', // 省
      city: '', // 市
      district: '', // 区 县
      nowPlace: '', // 省-市-区
      Address: '' // 详细地址
    },
    status: false // 用于回调函数判断 位置是否请求成功
  },
  /**
   * 调用百度 api Geolocation()
   * @param callback
   * @callback locationData
   */
  getPosition: function(callback) {
    const _thisSelf = this
    const geolocation = new BMap.Geolocation()
    geolocation.getCurrentPosition(function(result) {
      // 得到html5定位结果
      if (result) {
        // alert('您的位置：'+r.point.lng+','+r.point.lat);
        const latitude = result.latitude // 纬度 y 30左右
        const longitude = result.longitude // 经度 x 100左右
        console.log('latitude', latitude, 'longitude', longitude)
        _thisSelf.newGetAddress(latitude, longitude, callback)
      } else {
        // alert('failed'+this.getStatus());
        _thisSelf.locationData.status = false // 代表获取位置信息失败
        callback(_thisSelf.locationData) // 回调函数
      }
    })
  },
  /**
   * 调用百度 api Geocoder()
   * @param latitude 维度
   * @param longitude 经度
   * @param callback
   * @callback locationData
   */
  newGetAddress: function(latitude, longitude, callback) {
    const _thisSelf = this
    _thisSelf.locationData.nowLocation.lat = latitude
    _thisSelf.locationData.nowLocation.lon = longitude
    var map = new BMap.Map('mapAmap1')
    map.centerAndZoom(new BMap.Point(latitude, longitude), 11)
    // 创建地理编码实例
    var myGeo = new BMap.Geocoder()
    // 根据坐标得到地址描述, 经纬度反写
    // 纬度29.5647100000,106.5507300000 重庆市；31.2303700000,121.4737000000 上海市
    myGeo.getLocation(new BMap.Point(longitude, latitude), function(result) {
      if (result) {
        const { addressComponents } = result
        _thisSelf.locationData.status = true
        _thisSelf.locationData.nowLocation.province = addressComponents.province
        _thisSelf.locationData.nowLocation.city = addressComponents.city
        _thisSelf.locationData.nowLocation.district = addressComponents.district
        _thisSelf.locationData.nowLocation.nowPlace = addressComponents.province + addressComponents.city + addressComponents.district
        _thisSelf.locationData.nowLocation.Address = result.address
        callback(_thisSelf.locationData) // 回调函数
      } else {
        // alert('failed'+this.getStatus());
        _thisSelf.locationData.status = false // 代表获取位置信息失败
        callback(_thisSelf.locationData) // 回调函数
      }
    })
  }
}

export default locationBMap
